package com.mc.adapter.wechat.mpAPI.pay.redpack;

import java.util.HashMap;
import java.util.Map;

/**
 * 现金红包对象
 *
 * 接口文档：https://pay.weixin.qq.com/wiki/doc/api/cash_coupon.php?chapter=13_5
 *
 * <p>
 * 用于企业向微信用户个人发现金红包
 * </p>
 *
 * <p>
 * 目前支持向指定微信用户的openid发放指定金额红包。
 * </p>
 *
 * <b>是否需要证书</b>
 *
 * 是（证书及使用说明详见https://pay.weixin.qq.com/wiki/doc/api/cash_coupon.php?chapter=4_3）
 *
 * @author qsyang
 * @version 1.0
 */
public class SendRedPack {

	/**
	 * 随机字符串
	 *
	 * 随机字符串，不长于32位
	 */
	private String		nonce_str;
	/**
	 * 签名
	 *
	 * 签名算法：https://pay.weixin.qq.com/wiki/doc/api/cash_coupon.php?chapter=4_3
	 */
	private String		sign;
	/**
	 * 商户订单号
	 *
	 * 商户订单号（每个订单号必须唯一）
	 *
	 * 组成：mch_id+yyyymmdd+10位一天内不能重复的数字。
	 */
	private String		mch_billno;
	/**
	 * 商户号
	 */
	private String		mch_id;
	/**
	 * 公众账号appid
	 */
	private String		wxappid;
	/**
	 * 提供方名称
	 */
	private String		nick_name;
	/**
	 * 商户名称
	 *
	 * 红包发送者名称
	 */
	private String		send_name;
	/**
	 * 用户openid
	 *
	 * 接受红包的用户
	 *
	 * 用户在wxappid下的openid
	 */
	private String		re_openid;
	/**
	 * 付款金额
	 *
	 * 付款金额，单位分
	 */
	private int			total_amount;
	/**
	 * 最小红包金额
	 *
	 * 最小红包金额，单位分
	 */
	private int			min_value;
	/**
	 * 最大红包金额
	 *
	 * 最大红包金额，单位分
	 *
	 * （最小金额等于最大金额：min_value=max_value=total_amount）
	 */
	private int			max_value;
	/**
	 * 红包发放总人数
	 *
	 * total_num=1
	 */
	private final int	total_num	= 1;
	/**
	 * 红包祝福语
	 */
	private String		wishing;
	/**
	 * Ip地址
	 */
	private String		client_ip;
	/**
	 * 活动名称
	 */
	private String		act_name;
	/**
	 * 备注
	 */
	private String		remark;

	public Map<String, String> toMap() {
		Map<String, String> map = new HashMap<String, String>();
		map.put("nonce_str", this.nonce_str);
		map.put("mch_billno", this.mch_billno);
		map.put("mch_id", this.mch_id);
		map.put("wxappid", this.wxappid);
		map.put("nick_name", this.nick_name);
		map.put("send_name", this.send_name);
		map.put("re_openid", this.re_openid);
		map.put("total_amount", this.total_amount + "");
		map.put("min_value", this.min_value + "");
		map.put("max_value", this.max_value + "");
		map.put("total_num", this.total_num + "");
		map.put("wishing", this.wishing);
		map.put("client_ip", this.client_ip);
		map.put("act_name", this.act_name);
		map.put("remark", this.remark);
		return map;
	}

	public String toXML() {
		StringBuilder sb = new StringBuilder();
		sb.append("<xml>");
		sb.append("<sign><![CDATA[").append(this.sign).append("]]></sign>");
		sb.append("<mch_billno><![CDATA[").append(this.mch_billno).append("]]></mch_billno>");
		sb.append("<mch_id><![CDATA[").append(this.mch_id).append("]]></mch_id>");
		sb.append("<wxappid><![CDATA[").append(this.wxappid).append("]]></wxappid>");
		sb.append("<nick_name><![CDATA[").append(this.nick_name).append("]]></nick_name>");
		sb.append("<send_name><![CDATA[").append(this.send_name).append("]]></send_name>");
		sb.append("<re_openid><![CDATA[").append(this.re_openid).append("]]></re_openid>");
		sb.append("<total_amount><![CDATA[").append(this.total_amount).append("]]></total_amount>");
		sb.append("<min_value><![CDATA[").append(this.min_value).append("]]></min_value>");
		sb.append("<max_value><![CDATA[").append(this.max_value).append("]]></max_value>");
		sb.append("<total_num><![CDATA[").append(this.total_num).append("]]></total_num>");
		sb.append("<wishing><![CDATA[").append(this.wishing).append("]]></wishing>");
		sb.append("<client_ip><![CDATA[").append(this.client_ip).append("]]></client_ip>");
		sb.append("<act_name><![CDATA[").append(this.act_name).append("]]></act_name>");
		sb.append("<remark><![CDATA[").append(this.remark).append("]]></remark>");
		sb.append("<nonce_str><![CDATA[").append(this.nonce_str).append("]]></nonce_str>");
		sb.append("</xml>");
		return sb.toString();
	}

	public String getNonce_str() {
		return this.nonce_str;
	}

	public void setNonce_str(String nonce_str) {
		this.nonce_str = nonce_str;
	}

	public String getSign() {
		return this.sign;
	}

	public void setSign(String sign) {
		this.sign = sign;
	}

	public String getMch_billno() {
		return this.mch_billno;
	}

	public void setMch_billno(String mch_billno) {
		this.mch_billno = mch_billno;
	}

	public String getMch_id() {
		return this.mch_id;
	}

	public void setMch_id(String mch_id) {
		this.mch_id = mch_id;
	}

	public String getWxappid() {
		return this.wxappid;
	}

	public void setWxappid(String wxappid) {
		this.wxappid = wxappid;
	}

	public String getNick_name() {
		return this.nick_name;
	}

	@Deprecated
	public void setNick_name(String nick_name) {
		this.nick_name = nick_name;
	}

	public String getSend_name() {
		return this.send_name;
	}

	public void setSend_name(String send_name) {
		this.send_name = send_name;
	}

	public String getRe_openid() {
		return this.re_openid;
	}

	public void setRe_openid(String re_openid) {
		this.re_openid = re_openid;
	}

	public int getTotal_amount() {
		return this.total_amount;
	}

	public void setTotal_amount(int total_amount) {
		this.total_amount = total_amount;
		this.min_value = total_amount;
		this.max_value = total_amount;
	}

	public String getWishing() {
		return this.wishing;
	}

	public void setWishing(String wishing) {
		this.wishing = wishing;
	}

	public String getClient_ip() {
		return this.client_ip;
	}

	public void setClient_ip(String client_ip) {
		this.client_ip = client_ip;
	}

	public String getAct_name() {
		return this.act_name;
	}

	public void setAct_name(String act_name) {
		this.act_name = act_name;
	}

	public String getRemark() {
		return this.remark;
	}

	public void setRemark(String remark) {
		this.remark = remark;
	}
}
